/**
 * 
 */
//Variables globales 
//var servidor="http://localhost:8888/actinmap/"; //DANI
//var servidor = "http://localhost/joomla/"; //HAIZEA
//var servidor = "http://localhost:8888/joomla/"; //LIHER
var listaEventos;
var pos;

$(window).load(function (){
	createMap();
	drawUserEvents(idUsuario);
});
$(document).ready(function() {
	$(".moreLink").click(function(){
		if($(this).parents(".moreDiv").prev(".datosEvento:visible").length!=0){
			$(this).parents(".moreDiv").prev(".datosEvento:visible").slideUp("fast");
			$(this).html("<b>Ver mas datos...</b>");
		}
		else{
			$(this).parents(".moreDiv").prev(".datosEvento:hidden").slideDown("fast");
			$(this).html("<b>Ocultar...</b>");
		}
		return false;
	});
	
	$(".editarEvento").click(function(){
		if($(this).parents(".eliminar").prev(".edicionEvento:visible").length!=0){
			$(this).parents(".eliminar").prev(".edicionEvento:visible").slideUp("fast");
		}
		else{
			$(this).parents(".eliminar").prev(".edicionEvento:hidden").slideDown("fast");
		}
		return false;
	});
	
	$( ".eventDate" ).datepicker({ minDate:+1,dateFormat: 'yy-mm-dd'});
	
	$(".eventoEditado").click(function(){
		alert("Evento editado");
		return false;
	});
	
	$(".anularSuscripcion").click(function(){
		var numeroEvento = $(this).parent("em").attr("title");
		anularSuscripcion(numeroEvento);
		return false;
	});
	
	$(".eliminarEvento").click(function(){
		var numeroEvento = $(this).parent("em").attr("title");
		eliminarEvento(numeroEvento);
		return false;
	});

});

function eliminarEvento(numeroEvento){
	
	var jsonObject={"idEvento" : numeroEvento};
    var eliminarURL = servidor + "index.php?option=com_actinmap&task=rest.deleteEvent&format=json";

    $.ajax({
        url : eliminarURL,
        type : "post",
        data: {data : JSON.stringify(jsonObject)},
        dataType : 'json'
    });
    // eliminar div y pincho
    $("#"+numeroEvento).hide();
    for(i=0;i<listaEventos.length;i++)
    {
    	if(listaEventos[i]._idEvent == numeroEvento)
    	{
    		listaEventos[i]._marker.setMap(null);
    	}
    }	    
}

function anularSuscripcion(numeroEvento){
    
	var jsonObject={"idEvento" : numeroEvento};
	var anularURL = servidor + "index.php?option=com_actinmap&task=rest.eventSuscriptionDelete&format=json";

    $.ajax({
        url : anularURL,
        type : "post",
        data: {data : JSON.stringify(jsonObject)},
        dataType : 'json'
    });
 // eliminar div y pincho
    $("#"+numeroEvento).hide();  
    for(i=0;i<listaEventos.length;i++)
    {
    	if(listaEventos[i]._idEvent == numeroEvento)
    	{
    		listaEventos[i]._marker.setMap(null);
    	}
    }	    
}

function drawUserEvents(){
	
}

function editEvent(formularioValido){
	//Aqui ejecutar el metodo AJAX
	if(!formularioValido)
	{
		//Aqui no hacer nada, si entra aqui quiere decir que no ha sido correctamente validado
		alert("Los datos no son validos.");
		return false;
	}
	else
	{
		var numeroEvento = formularioValido.idEvento.value;
		var nombreEvento = formularioValido.eventName.value;
		var categoria= formularioValido.eventCategory.value;
		var data = formularioValido.eventDate.value;
		var hora = formularioValido.eventHour.value;
		var descripcion = formularioValido.eventDescrip.value;
		var img = formularioValido.eventImage.value;
	
		//actualiza los datos del array
		actualizarArray(categoria,numeroEvento,nombreEvento,data,hora,descripcion,img);
		
		var jsonObject={"_idEvent" : numeroEvento,"_nameEvent" : nombreEvento,"_date" : data,"_hora" : hora,"_description" : descripcion,"_image" : img,"_category" : categoria};
		var editURL = servidor + "index.php?option=com_actinmap&task=rest.updateEvent&format=json";
     
		$.ajax({
	        url : editURL,
	        type : "post",
	        data: {data : JSON.stringify(jsonObject)},
	        dataType : 'json'	        
	    });
		
		//refrescar div
		actualizarHtml(numeroEvento);
		
		$("#"+numeroEvento).find(".edicionEvento:visible").slideUp("fast");
	}    
}
function actualizarArray (categoria,numeroEvento,nombreEvento,data,hora,descripcion,img)
{
	//lograr posicion
	for (i=0;i<listaEventos.length;i++)
	{
		if(listaEventos[i]._idEvent==numeroEvento)
			{
			  pos = i;
			}
	}
	//alert(pos);
	//actualizar datos del array js
	listaEventos[pos]._idCategory=categoria;	
	listaEventos[pos]._image=img;
	listaEventos[pos]._date=data;
	listaEventos[pos]._hora=hora;
	listaEventos[pos]._description=descripcion;
	listaEventos[pos]._nameEvent=nombreEvento;

	switch (categoria)
	{
		case "1": listaEventos[pos]._nameCategory="Concierto"; break;
		case "2": listaEventos[pos]._nameCategory="Teatro"; break;
		case "3": listaEventos[pos]._nameCategory="Manifestacion"; break;
		case "4": listaEventos[pos]._nameCategory="Exposicion"; break;
		case "5": listaEventos[pos]._nameCategory="Evento Cultural"; break;
		case "6": listaEventos[pos]._nameCategory="Evento Deportivo"; break;
	}
}

function actualizarHtml(numeroEvento)
{
	var divEvento=$("#"+numeroEvento);
	// Actualizar BloqueFechaHora
	divEvento.find(".bloqueFecha").text(listaEventos[pos]._date);
	divEvento.find(".bloqueFecha").prepend("<b>Fecha: </b>");
	divEvento.find(".bloqueHora").text(listaEventos[pos]._hora);
	divEvento.find(".bloqueHora").prepend("<b>Hora: </b>");
	
	// Actualizar bloqueCategoriaCreador
	divEvento.find(".bloqueCategoria").text(listaEventos[pos]._nameCategory);
	divEvento.find(".bloqueCategoria").prepend("<b>Categoria: </b>");

	// Actualizar bloqueDescripcion
	divEvento.find(".bloqueDescripcion").text(listaEventos[pos]._description);
	divEvento.find(".bloqueDescripcion").prepend("<b>Descripcion:  </b>");
	// Actualizar NombreEvento*/
	divEvento.find(".nombreEvento").text("Eres el creador del evento:"+listaEventos[pos]._nameEvent);
	
}

function validateTimeFormat(txtTimeValue) {
	var errorOccured = "";

	regularExpression = /^(\d{1,2}):(\d{2})(:00)?([ap]m)?$/;

	if (txtTimeValue != '') {
		if (arrregularExpressions = txtTimeValue.match(regularExpression)) {
			if (arrregularExpressions[4]) {
				// check for am/pm. This is 12hours time format check
				if (arrregularExpressions[1] < 1
						|| arrregularExpressions[1] > 12) {
					errorOccured = "Error: introduce horas validas. Formato 24h.";
				}
			} else {
				// This is 24hours time format check
				if (arrregularExpressions[1] > 23) {
					errorOccured = "Error: introduce horas validas. Formato 24h.";
				}
			}
			if (!errorOccured && arrregularExpressions[2] > 59) {
				errorOccured = "Introduce minutos validos "
						+ arrregularExpressions[2];
			}
		} else {
			errorOccured = "Error: introduce una hora valida. Ejemplo: 19:20 ";
		}
	} else {
		errorOccured = "Tienes que indicar una hora";
	}

	if (errorOccured != "") {
		alert(errorOccured);
		return false;
	} else {
		return true;
	}
}

function validateForm(form){
	// Funcion que comprueba que todos los campos estan bien antes de crear un
	// nuevo evento

	if(form.eventName.value==""){
		alert("Tienes que indicar un nombre");
		return false;
	}
	if(form.eventDate.value.length==0){
		alert("Tienes que indicar una fecha");
		return false;
	}
	if(!validateTimeFormat(form.eventHour.value)){
		return false;
	}
	if(form.eventDescrip.value.length==0){
		alert("Tienes que indicar una descripcion para el evento");
		return false;
	}
	return form;
}

function drawUserEvents(idUsuario){
	
	if(idUsuario)
	{
		var UserEventsURL = servidor+"index.php?option=com_actinmap&task=rest.events&idUsuario="+idUsuario+"&format=json";
		 $.ajax({
		               url : UserEventsURL,
		               type : "GET",
		               dataType : "json",
		               success : getUserEventsSucceded
		       }); 
		}
		
}

function getUserEventsSucceded(results)
{
 var ObjetoEvento = function userEvents(results) {
       
	   this._idEvent = results._idEvent;
       this._idCreator = results._idCreator;
       this._idCategory = results._category;
       this._idAreaAdministrativa= results._idAreaAdministrativa;
       this._status = results._status;
       this._image= results._image;
       this._coord = results._coord;
       this._nameEvent = results._nameEvent;
       this._description = results._description;
       this._date = results._date;
       this._hora= results._hora;
       this._numVisitas=results._contadorVisitas;
       this._nameCreator =results._nameCreator;
       this._nameCategory = results._nameCategory;
       this._nameAreaAmin = results._areaAdmin;
       var coma=(results._coord).indexOf(',');
       var tope=(results._coord).indexOf('</');
       var lat= parseFloat(results._coord.substring(coma+1,tope-2));
       var lng=parseFloat(results._coord.substring(20,coma));
       var myLatlng = new google.maps.LatLng(lat,lng);
       this._marker = new google.maps.Marker({
      	   position: myLatlng,
    	   map:map
    	   }); 
       google.maps.event.addListener(this._marker, 'click', markerClicked);
   } 
   listaEventos = new Array();
	 for(i=0;i<results.length;i++)
		{
		 listaEventos[i]=new ObjetoEvento(results[i]);
		}
	/*alert(listaEventos[0]._marker.position);
	alert(listaEventos[1]._marker.position);*/
 }
function markerClicked(event) {
	/*coger la posicion del pincho y comparar con el array de todo los eventos --> para
	coger el idEvent del objeto posicion indice obtenido en el paso anterior.
	cambiar el background del div que coincida con el idEvento obtenido.*/

	if ($("#" + idActiveEvent) != 0) {
		$("#" + idActiveEvent).css("background-color", "#FFFFFF");
	}

	for (i = 0; i < listaEventos.length; i++) {
		if (this.position == listaEventos[i]._marker.position) {
			idActiveEvent = listaEventos[i]._idEvent;
		}
	}

	$("#" + idActiveEvent).css("background-color", "#EEE8AA");

}
	 

